LightSpeed Holdings · 00 Brand · Group Identity

Brand Guide

LightSpeed Holdings

One ground, six colours, three faces, and a masthead that never changes.

Version 1.014 sections 6 colours, 3 faces One register, never inverted
LightSpeed
Holdings
Everything, in daylight
Outfit MediumDisplay
Inter RegularBody
0123456789Plex Mono

01 / Foundation

One register, and colour does the work

Thorne Syndicate runs two registers on one skeleton and flips the ground between them. LightSpeed does the opposite on purpose. There is one ground, one light, and one set of rules. What varies is colour.

A holding company that owns an agricultural business, a health device business and a software business has no single subject. Thorne solves that by flipping dark and light. LightSpeed solves it by giving every part of the group a colour and never moving the ground. Northbeam is teal wherever it appears. Kestrel is amber. Vela is terracotta. A reader who has seen two pages can read the third without a legend.

The practical consequence: never invert a LightSpeed page. There is no dark variant. A page that needs to feel serious gets less colour, not a darker ground.

Where the look came from

The reference was a desk covered in printed infographic sheets — pale paper, thin connector lines, circular icon badges, donut charts, and a palette of petrol blue, sage, amber and terracotta. Everything in this guide is an attempt to make a screen behave like that desk: matte, generous, colourful without shouting.

The group has no home

LightSpeed is international, and nothing it publishes should say where it lives. No head-office address, no home currency, no national holidays, no "our region". A reader in Chicago and a reader in Manchester should both find it unremarkable.

  • Three cities carry the group: New York, London, Tokyo. They are the clocks on the room signs, the legs of the partner tour and the datelines on documents. Use them when a place is needed
  • Vary the dateline between artifacts. The letter is written from London, the deck is presented in New York, the tour visits all three. No single one is home
  • Names are Western. Written for English-speaking markets, which are the primary audience
  • Regions, never nations, in aggregate figures. North America, Europe, Asia Pacific, Middle East, Latin America. Country breakdowns are fine where a country breakdown is the actual point
  • Dollars throughout, and metric distance. Dates as 17 October 2026, which is unambiguous on both sides of the Atlantic

Spelling follows American usage — license, not licence — while the prose register stays neutral.

Thorne SyndicateLightSpeed Holdings
GroundFlips. Anvil dark, or cast concreteNever flips. Paper
CutThe chamfer. 45°, never roundedThe soft radius. 14px on cards
AccentOne. Bronze, graphic use onlySix. Each one owns a subject
Display typeOswald. Condensed, industrialOutfit. Geometric, open
PhotographyArchitecture, no people, low lightInteriors and objects, high key
FeelingA foundry at nightA studio at nine in the morning

02 / The mark

Three chevrons, three colours

Light through a prism, reduced until it survives at sixteen pixels. Three chevrons, left to right, in teal, amber and terracotta. Nothing else.

The chevrons are drawn as three separate open paths, each 6.5 units wide on a 48-unit artboard, with round caps and round joins. They overlap deliberately: the gap between them is smaller than a chevron arm, so at small sizes they read as one accelerating shape rather than three separate arrows.

Clear space and minimum size

  • Clear space is one chevron arm on every side. At 32px that is 9px
  • Minimum size is 16px square. Below that, use the teal chevron alone
  • In the masthead the mark sits at 32px, paired with the wordmark at 11px, letter-spaced 0.13em, uppercase, in Slate
  • On a photograph, place the mark on a white pill with 92% opacity — never directly on the image

Never

  • Recolour the chevrons, including to a single colour or to white
  • Add a container: no circle, no rounded square, no shield
  • Reverse the direction, stack them vertically, or animate them
  • Set the wordmark in anything but Outfit Medium, uppercase, letter-spaced
  • Use the mark as a bullet, a loading spinner, or a favicon at under 16px

03 / Colour

Six colours, and each one owns something

The palette is not decoration. Every colour is assigned to a subject and holds that assignment across every page in the group. If teal appears, it is Northbeam or it is technology. It is never just “the blue one”.

ColourHexOwnsSecond use

The neutrals

Paper is the only ground. Card is the only surface. Nothing else is a background.

The contrast rule, learned the hard way

The first treemap build put white text on amber and on sage. It was unreadable, and it shipped in a screenshot before anyone noticed. The rule now:

  • White text on Teal, Petrol, Terracotta, Slate Blue and their darker tints
  • Graphite text on Amber, Sage, and every grey lighter than Steel
  • When you cannot decide, the fill is too light for white. Use Graphite
  • Measure text colours, do not eyeball them. Slate shipped at #737E8B with a comment claiming 4.8:1 against Paper. It measured 3.78:1 — below the 4.5 needed for normal text. It is now #66717D at 4.53. The up and down greens and reds were 3.13 and 3.97 and are now 4.5 or better. A Codex pass caught all three

The same rule governs chips, pills, funnel bars and treemap cells. It is carried in code as a single lt flag on the colour, not judged per component.

04 / Type

Three faces, four jobs

Outfit for anything that is a name. Inter for anything that is a sentence. IBM Plex Mono for anything that is a number, a label, or a path.

Numerals are always tabular

Every figure in the system carries font-variant-numeric: tabular-nums. A number that changes while you watch it — a live counter, a mark-to-market value, a clock — must not shift the characters around it. This is the single most common thing to forget and the most obvious when it is wrong.

05 / The cut

The soft radius, and only four values

Thorne has the chamfer. LightSpeed has the radius. Four values, applied by role, never chosen by eye.

Nothing is square. A zero radius reads as an error in this system, the same way a rounded corner reads as an error in Thorne.

06 / The masthead

The part that makes a wall of pages one set

Every artifact opens with the same five elements in the same order at the same sizes. Change the words. Never change the anatomy.

LightSpeed Holdings · 00 Brand · Group Identity

Every page opens like this

LightSpeed Holdings

One sentence. What this page is, and who it is for. Never two sentences.

Live Context A number
BreadcrumbMono, 10px, 0.16em, uppercase, Slate. Group · folder · owner. Always three parts
TitleOutfit Medium 34px, −0.024em, max 24 characters wide. A noun phrase, never a sentence
Mark32px, top right, aligned to the breadcrumb. Links back to lite.html on every page
StandfirstInter 13.5px Slate, one line, max 54 characters wide. Says what the page is
Pill stripTwo to four. First one carries the live dot. Mono 10.5px uppercase in a 999px capsule
DepthAbout 170px including the rule. This is a ceiling, not a target — see section 07

07 / The fold

The showcase clears the fold, and the cut lands on an edge

These pages are photographed. A screenshot captures roughly the first screen and nothing else, so the first screen has to carry the whole argument.

Two rules follow, and they are as much a part of this brand as the palette.

✗ Wrong

A deep masthead eats the screen, and the cut falls through the middle of a row of cards. The screenshot shows a headline and four half-cards.

✓ Right

A shallow masthead, then the graphic sized to exactly the room left. The cut lands on the card’s own edge, at half screen and at full screen alike.

How it is built

The lead block carries data-lead (how many pixels of content sit between it and the fold) and data-max (a ceiling, so a tall display does not produce an absurd hero). A script sets its height to innerHeight − itsTop − tail − 16, capped. An empty .foldstop element after it takes whatever viewport is left, which pushes the next section onto the second screen.

It re-runs on resize, on load, and after document.fonts.ready. Bind those as function(){fitFold()}, never as the bare function — see section 11.

The rule governs cards, not prose

A screenshot that slices a row of cards in half looks broken. A screenshot that stops mid-paragraph looks like a page of writing, which is what it is. So the Annual Letter carries no fold spacer at all: forcing a break there would push the first chapter off a screen with room for it, and buy nothing.

Size the lead block with a minimum height, never a fixed one. A fixed height plus overflow:hidden clips content that grows — which is exactly how the letter lost its dateline. See section 14.

And no two lead blocks may be alike

A set of samples whose first screens all look the same is one sample shown six times. Each page in the group leads with a different kind of graphic:

PageLeads with
01 TravelA photograph beside an animated route map
02 PortfolioA treemap, sized by position value
03 BriefingsA wall of eight small charts
04 RevenueA three-series line chart
05 DigitalStacked columns beside a real-time panel
06 ContentA month grid in colour
00 BrandThe mark and the palette, as a specimen

08 / Charts

Drawn in the page, never by a library

Every chart in this group is hand-built SVG. No chart library, no CDN, no network call except the web font. A page has to open correctly on a laptop with no internet in an airport.

  • Series order follows the palette order — teal, amber, terracotta, sage, slate blue, petrol. A three-series chart uses the first three
  • Gridlines are Soft (#EFEDE7), 1px, horizontal only. No vertical grid, no chart border, no drop shadow on a plot
  • Areas fade to nothing. A flat fill under three overlapping lines makes a brown wash. Use a vertical gradient from 26% to 0%
  • Axis labels are Plex Mono 9.5px in Slate. The zero label reads “0”, never “0.0”
  • The live point is filled and pulses. Every other point is a white disc with a 2px coloured ring
  • Redraw at pixel size. Set the viewBox to the element’s real width and height so the aspect ratio matches and strokes never distort

Never

  • Use a colour outside the six, including for “other” or “total”
  • Use red and green as the only difference between two series
  • Start a value axis anywhere but zero, unless the axis is labelled as an index
  • Put more than six series on one chart. Group the tail

09 / Motion

Everything arrives, nothing fidgets

Motion in this system does one of two jobs: it shows a value arriving, or it shows that something is live. Anything else is noise.

Above the fold, animate position — never opacity

The gallery snapshots a page for its card long before any timer has run. A first screen staged at opacity: 0 and faded in by script is a blank card, and a blank card makes the app look broken even though the page is perfect. Six of these eleven pages thumbnailed as a masthead and nothing else until this rule existed.

  • First-screen content is readable in the first painted frame. Full opacity, always
  • Its entrance moves it — a slide, a small scale — so a snapshot taken mid-animation still shows the content, just fractionally out of place
  • Motion above the fold modulates something already visible: a pulse, a drift, a sweep. Never an entrance from nothing
  • Below the fold, fade freely. Nothing down there is ever the thumbnail

The Meeting Room Display was the one page that always thumbnailed correctly, and it is the one page that never faded anything in.

Hover previews, and how long to wait

A control that navigates somewhere should be able to say where, before it is pressed. The deck's next and previous buttons preview the slide they lead to, and the progress bar previews any slide you point at. The delays are deliberate:

SituationDelayWhy
First hover on a control400 ms Long enough that a pointer crossing the control never flashes a tip; short enough that anyone who paused to ask gets an answer without waiting
Moving to a neighbouring control0 ms Once one tip is open the group is warm. Two buttons side by side should not feel like two separate waits
Group cools down after leaving300 ms Long enough to cross a gap between controls, short enough that a later hover feels like a fresh question
Scrubbing along the progress bar0 ms Here the pointer is the question, as on a video timeline. Any delay reads as lag
Hiding0 ms A tip that lingers after the pointer has gone is in the way
  • Escape dismisses, per WCAG 2.2 success criterion 1.4.13
  • Keyboard focus shows the tip immediately — someone tabbing to a control has already committed to it
  • A preview says where, not what. Slide number, section, title. Never a second copy of the content
  • Never a tooltip on something that is already labelled. If the control needs a tip to be understood at all, the control is wrong

The slide a presenter lingers on

A title slide is on screen while somebody introduces themselves, which is longer than any other slide in the deck. It is the one place where a still page reads as a dead page, and the one real advantage this format has over a PDF. It carries three loops, none of which should be noticeable on their own:

It is one gesture, and it runs left to right across the whole slide. Not several loops running at once — a single nine-second pass that hands off from one element to the next, then rests for five seconds.

SlotWhat happens
0 – 2.0sA soft highlight crosses the six-colour rule beneath the title, left to right, and leaves
2.0 – 3.8sIt hands off to the mark. Each chevron dims to 42% and returns, one after another, half a second apart
1.8 – 4.0sUnderneath that, the mark eases 2.8% to the right and grows 4%, then settles back
4.0 – 9.0sNothing. The rest is as much a part of it as the movement

Because the chevrons point the way the deck advances, the sweep says forward as well as saying the company’s name. The rule bar is set to exactly the width of the title so the pass reads as one straight line, and the mark sits centred in the space between the title and the edge of the page.

Behind all of it, two washes drift — teal and amber at 13% alpha, 38 and 46 seconds, out of phase — so the frame is never quite static even during the rest.

One gesture, not several. An earlier version also pulsed the small corner mark and drew an underline beneath the date. With three things moving, none of them read as intentional. The corner mark now drops its icon on this slide entirely — the wordmark alone is enough, and the logo should appear at full size once, not three times on one screen.

Nothing on a title slide may move fast, bounce, or repeat on a cycle shorter than four seconds. If a viewer can time the loop, it is too quick. And every keyframe begins at full opacity, so the gallery thumbnail is never caught mid-fade.

The two curves

Arrivals use cubic-bezier(.22, 1, .36, 1) — fast out, long settle. Counters use a cubic ease-out in script. There is no bounce anywhere in the system, and nothing loops except the live dot and the flight paths.

Every looping animation stops for reduced motion. Every page in this group carries a prefers-reduced-motion: reduce block that cancels the loops and leaves the finished state on screen. A drawn line ends drawn; an underline ends underlined.

Navigation runs off intent, never off measured position. Asking the scroll container "where am I" during an animation answers with the slide you just left, so a fast run of clicks appears to do nothing. The position advances the instant a click lands; the scroll listener only re-syncs when the user scrolls by hand. See section 14.

Every animated number must settle. A counter that is still climbing when the screenshot is taken is a broken screenshot. Each one force-writes its final value after 1.8 seconds regardless of what the animation frame is doing.

10 / Photography

High key, warm neutral, no people

The photography is the other half of the light register. Bright, matte, generous with empty space, and always a little cooler than the palette so the colour stays the loudest thing on the page.

  • No people, ever. Interiors are empty, desks are unattended, platforms have no crowd
  • Soft natural daylight, and from the same side across a set, so a row of photographs sits together
  • Warm neutrals with one accent — terracotta, sage or amber, matching whichever part of the group the page belongs to
  • Generous negative space, usually the upper third, so a caption can sit over the image without a scrim covering the subject
  • No readable text in frame. No signage, no packaging, no logos

The prompt that produces it

These are generated, and the phrasing matters more than the tool. The working grammar, with the load-bearing phrases in bold:

Subject: <one subject>, <top-down | three-quarter | wide>, <one distinguishing detail>. Resting on / seen from <surface or vantage>. Soft natural <morning | afternoon> daylight from the left. Style: Editorial Kinfolk/Cereal magazine register. Bright, high-key, light and modern. Warm neutral palette with muted <accent> accents. Generous negative space. No people. No text, no logos, no watermarks.

Delivered as JPEG, longest edge 1400px, quality 80, then embedded in the page as a data URI so the file stays a single portable artifact.

11 / Wired into Lite

What the app reads, and where things live

Every page declares its preset and accent so lite.computer can theme its chrome to match the artifact.

<meta name="lite-preset" content="lightspeed-paper"> <meta name="lite-accent" content="#2E8C96">
PathHolds
lite.htmlThe front door. Six rooms and the palette strip
lite.theme.cssThe tokens, for the workspace shell
00 Brand/This guide, and the photography library
01–06One folder per artifact family

Files are named Subject-Words-Hyphenated.html inside a numbered folder. Every page is self-contained: styles inline, images embedded, scripts inline. A page can be moved, emailed or opened from a USB stick and still be correct.

12 / The display register

When a page is not a document

A slide and a wall sign are not read at a desk. They are read from the back of a room or from a corridor. They keep the palette, the type and the radius, and drop everything else the document register carries.

Document registerDisplay register
Used byReports, letters, dashboardsSlides, signage, wall boards
HeaderThe full masthead, section 06Mark and one name. Nothing else
BreadcrumbAlwaysNever
StandfirstAlways, one lineNever
MarginsPaper ground, 1180px measureFull bleed, edge to edge
Type scaleFixed pixelsSized in vmin, so it scales
The foldApplies. See section 07Does not. The page is the screen
ScrollYesSlides snap. Signs never scroll

Sizing in vmin, and why

A wall sign has to be right on a ten-inch door tablet and on a twenty-seven-inch panel, and a slide has to be right in a window and on a projector. Fixed pixel type cannot do both. Everything in the display register is sized against vmin, so the whole composition scales as one thing instead of reflowing.

Signs also carry a landscape rule: past a 1:1 aspect ratio the layout moves to two columns rather than letting content run off the bottom. A sign that overflows is a sign that lies.

What still holds

  • The six colours and their subject assignments, unchanged
  • The contrast rule from section 03 — it governs slide fills and status bands too
  • Outfit, Inter and IBM Plex Mono, in the same four roles
  • Tabular numerals on every figure, including a clock
  • The mark, exactly as drawn, with its clear space

A sign draws its own frame

Signage is read in presentation mode — no chrome, no comment bar, nothing around it. With no frame it bleeds into the display and stops reading as an object on a wall. So the panel sits inset from the screen on a slightly darker ground, with a hairline border, a 2.4vmin radius and one soft shadow. It should look like a plaque someone mounted, not like a web page filling a monitor.

  • Say what the thing is before you say its name. “Conference room” above “Meridian”. A stranger in a corridor needs the category first; the name means nothing to them yet
  • Line the content up with the panel, not with itself. The three clocks span the same gutters as the status band above them — first flush left, last flush right. Centring each one inside its own third left them floating out of line with everything else on the sign
  • A wall sign must never look frozen. The countdown runs to the second, not to the minute. “17 min” sitting unchanged for five minutes reads as a crashed screen; 17:54 ticking down reads as alive, and it is the cheapest possible proof that the panel is still connected
  • The state changes itself. When the countdown reaches zero the panel re-evaluates immediately rather than waiting for the next poll, so the band goes from terracotta to sage on the second the room frees

The three display pieces

PieceBehaviour
Q3 Board DeckTwelve full-bleed slides. Arrow keys advance it; scrolling reads it as a document. Scroll snapping does both jobs from one implementation
Meeting Room DisplayPortrait. A status band that washes sage, amber or terracotta as the room frees itself, and three analogue faces on real time
Annual LetterDocument register, but reading-first: one column, a 62-character measure, drawn illustrations rather than photographs

13 / A page that answers back

Controls, and the rule that governs them

One page in this group recomputes as you drag it. That is a different promise from a chart, and it carries its own rules.

  • Every visible number recomputes together. If one output lags a control, the reader stops trusting all of them
  • Controls sit above the fold, beside their outputs. A slider you have to scroll away from to see the effect of is not a control
  • Every control shows its range and its current value. No bare handles
  • There is always a way back. A reset to the base case, one click
  • State the verdict, not just the number. “Clears hurdle” beside the IRR, coloured by the same three-way rule as the sensitivity grid

The heat map

Sensitivity grids get their own five-step scale, and it is the only place in the system where colour encodes a magnitude rather than a subject: Terracotta below 10%, Amber to the 18% hurdle, Sage to 26%, Teal to 34%, Petrol above. The cell matching the current controls carries a Graphite outline so the reader can see where they are standing.

14 / What the build got wrong

Six mistakes, kept on the record

Recorded because each one shipped, each one was caught by looking at a rendered page rather than at the code, and each one will happen again to whoever builds the next set.

White text on light fills

The first treemap used white labels on every cell, including amber and sage. Unreadable. Contrast is now decided once per colour by an lt flag, not judged per component. Section 03.

An Event object in a callback slot

addEventListener('resize', fitFold) passes the Event as the function’s first argument. That argument was a callback, so calling it threw, and the fold spacer silently never got its height on three pages. Always bind as function(){fitFold()}.

Two clocks in one animation

A counter started from performance.now() but measured progress against the animation-frame timestamp. When the two disagreed, progress went negative, the easing curve inverted, and a live “visitors on site” readout showed 148,783 people. Take the start time from the first frame, and clamp progress to zero and one.

A span cannot have a height

The quota bars in Sales Performance were <span> elements. Inline elements ignore height and width, so the whole Attainment column rendered as empty space. It was invisible in the code and obvious in a screenshot.

A fixed height plus hidden overflow

The fold script set an exact pixel height on the lead block. When the Annual Letter’s opening grew by one contents list, the extra content was clipped — off the top, because the block was centred. The dateline vanished and nothing errored. Size with min-height: it does the same job and cannot cut.

Hand-drawn beats generated, until it doesn’t

The first set of spot illustrations were hand-authored SVG paths. They were on-palette, correct, and not good enough to print. Drawing by hand in code is the right instinct for a chart and the wrong one for an illustration.

The lesson under all six

Every one of these passed a read-through of the source and failed the moment the page was actually rendered and looked at. Two of them were invisible even then until someone opened the page at a different window size. Screenshot the thing, at more than one size.

Connected